package Orm.jdbc.jdbcMetadata;

import Orm.jdbc.connectorPool.JDBCUtils;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库元数据获取学习
 */
public class DatabaseMetaDataStudy {

    public static void main(String[] args) throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        DatabaseMetaData metaData = connection.getMetaData();
        // 获得JDBC连接参数信息
        System.out.println("数据库的URL为："+metaData.getURL());
        System.out.println("驱动程序的名称为："+metaData.getDriverName());
        System.out.println("当前数据库的连接者为："+metaData.getUserName());

        /**
         * Catalog—目录名称;必须与存储在数据库中的目录名称匹配;"检索那些没有目录的;Null表示不应使用编目名称来缩小搜索范围
         * Schema—模式名称;必须匹配存储在数据库中的模式名称;"检索那些没有模式的;Null意味着不应该使用模式名来缩小搜索范围
         * Table—表名;必须匹配表名，因为它存储在数据库中
         *
         * 这个方法查询的结果集描述如下：
         * TABLE_CAT String =表类别（可为 null）
         * TABLE_SCHEM String =表模式（可为 null）
         * TABLE_NAME String =表名称
         * COLUMN_NAME String =列名称
         * KEY_SEQ short =主键中的序列号（值 1 表示主键中的第一列，值 2 表示主键中的第二列）。
         * PK_NAME String =主键的名称（可为 null）
         *
         */
        ResultSet rs = metaData.getPrimaryKeys("world", null, "city");
        System.out.println("TABLE_CAT|TABLE_SCHEM|TABLE_NAME|COLUMN_NAME|KEY_SEQ|PK_NAME");
        while (rs.next()) {
            StringBuffer buffer = new StringBuffer();
            buffer.append(rs.getString("TABLE_CAT")).append("|");
            buffer.append(rs.getString("TABLE_SCHEM")).append("|");
            buffer.append(rs.getString("TABLE_NAME")).append("|");
            buffer.append(rs.getString("COLUMN_NAME")).append("|");
            buffer.append(rs.getShort("KEY_SEQ")).append("|");
            buffer.append(rs.getString("PK_NAME"));
            System.out.println(buffer.toString());
        }
    }

}
